<?php
/**
 * User: LRZ
 * Date: 2020/1/19
 * Time: 9:34
 */

/**
 *  1002.查找常用字符
 *
 *  标签：数组、哈希表
 *
 *  给定仅有小写字母组成的字符串数组 A，返回列表中的每个字符串中都显示的全部字符（包括重复字符）组成的列表。例如，如果一个字符在每个字符串中出现 3 次，但不是 4 次，则需要在最终答案中包含该字符 3 次。
 *  你可以按任意顺序返回答案。
 *
 *  示例 1：
 *      输入：["bella","label","roller"]
 *      输出：["e","l","l"]
 *
 *  示例 2：
 *      输入：["cool","lock","cook"]
 *      输出：["c","o"]
 *   
 *  提示：
 *      1 <= A.length <= 100
 *      1 <= A[i].length <= 100
 *      A[i][j] 是小写字母
 *
 *  来源：力扣（LeetCode）
 *  链接：https://leetcode-cn.com/problems/find-common-characters
 *  著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

$start = microtime(true);

$A   = ['cool', 'lock', 'cook'];
$res = commonChars($A);

$end = microtime(true);
print_r($res);
printf(' total run: %.2f s<br>' . 'memory usage: %.2f M<br> ', $end - $start, memory_get_usage() / 1024 / 1024);

function commonChars($A)
{
    if (empty($A)) {
        return [];
    }
    $size   = count($A);
    $res    = [];
    $str    = $A[0];
    $strLen = strlen($str);
    for ($i = 0; $i < $strLen; $i++) {
        $num   = 1;
        $value = $str[$i];
        for ($j = 1; $j < $size; $j++) {
            if (($index = strpos($A[$j], $value)) !== false) {
                $num++;
                $A[$j] = substr($A[$j], 0, $index) . substr($A[$j], $index + 1, strlen($A[$j]));
            }
        }

        if ($num % $size === 0) {
            $res[] = $value;
        }
    }

    return $res;
}